package com.iacrqq.sedaf.queue;

import java.util.List;

import com.iacrqq.sedaf.common.Destroyable;
import com.iacrqq.sedaf.common.Initializable;
import com.iacrqq.sedaf.common.Nameable;
import com.iacrqq.sedaf.profile.Profilable;
import com.iacrqq.sedaf.stage.Stage;

public interface Queue<T> extends Input<T>, Output<T>, Nameable, Profilable, Initializable, Destroyable{
	
	void setCapacity(int capacity);
	
	/**
	 * 
	 * @return
	 */
	QueueRuntimeStatistics getQueueRuntimeStatistics();
	
	/**
	 * 
	 * @param stage
	 */
	void addProductor(Stage stage);
	
	/**
	 * 
	 * @return
	 */
	List<Stage> getProductors();
	
	/**
	 * 
	 * @param stage
	 */
	void addConsummer(Stage stage);
	
	/**
	 * 
	 * @return
	 */
	List<Stage> getConsummers();
}
